/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.edu.uch.syscom.hibernateSpringDao;

import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.criterion.Restrictions;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import pe.edu.uch.syscom.managedbeans.uibeans.UIProductoBean;
import pe.edu.uch.syscom.mapping.TbProducto;

/**
 *
 * @author Jose Tejada
 */
public class HSProductoDAOImpl extends HibernateDaoSupport implements HSProductoDAO {

    public List<TbProducto> loadListaProductos( String sCampoBusqueda ) {
        Criteria criteria;
        criteria = this.getSession().createCriteria( TbProducto.class );
        criteria.add( Restrictions.eq( "activo", 1 ) );

        if ( sCampoBusqueda != null && !sCampoBusqueda.trim().isEmpty() ) {
            sCampoBusqueda = sCampoBusqueda.trim();
            criteria.add( Restrictions.disjunction().
                    add( Restrictions.like( "descripcion", "%" + sCampoBusqueda + "%" ) ) );

        }
        return criteria.list();
    }

    public TbProducto findPorId( int iIdProducto ) {
        return (TbProducto) this.getSession().get( TbProducto.class, iIdProducto );
    }

    public void guardarProducto( TbProducto tbProducto ) {
        if ( tbProducto != null ) {
            this.getHibernateTemplate().save( tbProducto );
        }
    }

    public void actualizarProducto( TbProducto tbProducto ) {
        this.getHibernateTemplate().saveOrUpdate( tbProducto );
    }

    public TbProducto getProductoPorDescripcion( String sDescripcion ) {
        TbProducto tbProducto;
        try {
            tbProducto = getProductoPorCampo( "descripcion", sDescripcion );
        } catch ( Exception ex ) {
            tbProducto = null;
        }
        return tbProducto;
    }

    public TbProducto getProductoPorCampo( String sCampo, String sValor ) {
        return (TbProducto) this.getSession().
                createCriteria( TbProducto.class ).
                add( Restrictions.eq( sCampo, sValor ) ).
                add( Restrictions.eq( "activo", 1 ) ).
                uniqueResult();
    }

    public List<TbProducto> buscarProductos( int iIdSubCategoria, String sCampoBusqueda ) {
        Criteria criteria;
        List<TbProducto> lstProductos;
        
        criteria = this.getSession().
                createCriteria( TbProducto.class ).
                add( Restrictions.eq( "activo", 1 ) ).
                add( Restrictions.like( "nombre", "%"+sCampoBusqueda+"%" ) );
        if ( iIdSubCategoria != 0 ) {
            criteria.add( Restrictions.eq( "tbSubcategoria.idSubcategoria", iIdSubCategoria ) );
        }
        lstProductos = criteria.list();
        return lstProductos;
    }
}
